﻿
namespace FastFood.Windows.Forms.Administracion.Comestibles
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
    using FastFood.Business.Entities;
    using FastFood.Windows.Helpers;

    public partial class CwfDetSemiTerminados : UserControl
    {
        CwfInsumoBusqueda insumosBusqueda;

        public List<SemiProductos_Insumos> ListaPreparacion { get; set; }

        public EstadoActual estadoActual;

        public CwfDetSemiTerminados()
        {
            InitializeComponent();
        }

        private void CwfPreparacion_Load(object sender, EventArgs e)
        {
            if (!DesignMode)
            {
                ClearControls();
                InitialLoad();
                EnabledControls(true);
                EnabledButtons(true);

                insumosBusqueda = new CwfInsumoBusqueda();
                insumosBusqueda.CwfInsumoBusqueda_SeleccionEntidad += new GetObjeto(insumosBusqueda_CwfInsumoBusqueda_SeleccionEntidad);
                insumosBusqueda.BorderStyle = BorderStyle.None;
                insumoCmb.DropDownControl = insumosBusqueda;
            }
        }

        private void Focus_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(Keys.Enter))
            {
                e.Handled = true;
                SendKeys.Send("{TAB}");
            }
        }

        private void TsbNuevo_Click(object sender, EventArgs e)
        {
            this.estadoActual = EstadoActual.Nuevo;
            EnabledControls(false);
            EnabledButtons(false);
            ClearControls();
            
            this.insumoCmb.Focus();
            this.preparacionBindingSource.AddNew();
        }

        private void TsbEditar_Click(object sender, EventArgs e)
        {
            this.estadoActual = EstadoActual.Editar;
            EnabledControls(false);
            EnabledButtons(false);
            this.insumoCmb.Focus();
        }

        private void TsbEliminar_Click(object sender, EventArgs e)
        {
            if (Mensaje.ShowMessageConfirm(this.ParentForm, Constantes.Titulo, "¿Desea eliminar el Registro?") == DialogResult.Yes)
            {
                this.estadoActual = EstadoActual.Eliminar;
                SaveData();
                this.estadoActual = EstadoActual.Normal;
                if (this.preparacionBindingSource.Current != null)
                {
                    LoadPreparacion(this.preparacionBindingSource.Current as SemiProductos_Insumos);
                }
            }
        }

        private void TsbGuardar_Click(object sender, EventArgs e)
        {
            if (ValidateData())
            {
                if (SaveData())
                {
                    this.estadoActual = EstadoActual.Normal;
                    if (this.preparacionBindingSource.Current != null)
                    {
                        LoadPreparacion(this.preparacionBindingSource.Current as SemiProductos_Insumos);
                    }

                    EnabledControls(true);
                    EnabledButtons(true);
                    this.preparacionDataGridView.Focus();
                }
            }
        }

        private void TsbCancelar_Click(object sender, EventArgs e)
        {
            if (this.estadoActual == EstadoActual.Nuevo || this.estadoActual == EstadoActual.Editar)
            {
                ClearControls();
            }
            this.estadoActual = EstadoActual.Normal;
            EnabledControls(true);
            EnabledButtons(true);
            this.preparacionBindingSource.CancelEdit();
            this.preparacionDataGridView.Focus();
        }
         
        private void insumosDataGridView_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1 && e.ColumnIndex != -1)
            {
                if (this.estadoActual == EstadoActual.Normal)
                    LoadPreparacion(this.preparacionBindingSource.Current as SemiProductos_Insumos);
            }
        }

        private void preparacionDataGridView_KeyDown(object sender, KeyEventArgs e)
        {
            if (this.estadoActual != EstadoActual.Normal) return;
            if (e.KeyCode == Keys.Delete)
            {
                if (this.preparacionDataGridView.SelectedRows.Count != 0)
                {
                    if (Mensaje.ShowMessageConfirm(this.ParentForm, Constantes.Titulo, "¿Desea eliminar el Registro?") == DialogResult.No)
                    {
                        e.Handled = true;
                    }
                    else
                    {
                        this.estadoActual = EstadoActual.Eliminar;
                        SaveData();
                        this.estadoActual = EstadoActual.Normal;
                        if (this.preparacionBindingSource.Current != null)
                        {
                            LoadPreparacion(this.preparacionBindingSource.Current as SemiProductos_Insumos);
                        }
                    }
                }
            }
        }

        public void InitialLoad()
        {
            try
            {
                if (ListaPreparacion == null) ListaPreparacion = new List<SemiProductos_Insumos>();
                preparacionBindingSource.DataSource = new List<SemiProductos_Insumos>(ListaPreparacion);
            }
            catch (Exception ex)
            {
                Mensaje.ShowMessageAlert(this.ParentForm, Constantes.Titulo, ex.Message);
            }
        }

        private void LoadPreparacion(SemiProductos_Insumos preparacion)
        {
            this.insumoCmb.Text = preparacion.nombreInsumo;
            this.insumoIDLabel.Text = preparacion.insumoID.ToString();
            this.cantidadTextBox.Text = preparacion.cantidad.ToString();
            this.semiTerminadoIDLabel.Text = preparacion.semiProductoID.ToString();
            //this.txtNombreInsumo.Text = preparacion.Insumos.nombre;
        }

        private bool SaveData()
        {
            bool result = false;
            try
            {
                switch (this.estadoActual)
                {
                    case EstadoActual.Nuevo:
                        ListaPreparacion.Add(GetPreparacion());
                        break;
                    case EstadoActual.Editar:
                        int index = 0;
                        SemiProductos_Insumos preparacion = this.preparacionBindingSource.Current as SemiProductos_Insumos;
                        foreach (SemiProductos_Insumos item in ListaPreparacion)
                        {
                            if (item.insumoID.Equals(preparacion.insumoID))
                            {
                                ListaPreparacion[index] = GetPreparacion();
                                break;
                            }
                            index++;
                        }
                        break;
                    case EstadoActual.Eliminar:
                        ListaPreparacion.Remove(this.preparacionBindingSource.Current as SemiProductos_Insumos);
                        this.preparacionBindingSource.RemoveCurrent();
                        break;
                }

                this.preparacionBindingSource.EndEdit();
                result = true;
                InitialLoad();
            }
            catch (Exception ex)
            {
                Mensaje.ShowMessageAlert(this.ParentForm, Constantes.Titulo, ex.Message);
            }
            return result;
        }

        private SemiProductos_Insumos GetPreparacion()
        {
            return new SemiProductos_Insumos
            {
                semiProductoID = Convert.ToInt16(semiTerminadoIDLabel.Text),
                insumoID = Convert.ToInt16(insumoIDLabel.Text),
                cantidad = Convert.ToDouble(cantidadTextBox.Text),
                nombreInsumo = insumoCmb.Text
            };
        }

        private bool ValidateData()
        {
            bool result = true;

            if (this.insumoIDLabel.Text=="-1")
            {
                this.errValidator.SetError(this.insumoCmb, "Seleccionar Insumo.");
                result = false;
            }
            else
            {
                this.errValidator.SetError(this.insumoCmb, string.Empty);
            }

            if (string.IsNullOrEmpty(this.cantidadTextBox.Text))
            {
                this.errValidator.SetError(this.cantidadTextBox, "Ingresar Cantidad.");
                result = false;
            }
            else
            {
                this.errValidator.SetError(this.cantidadTextBox, string.Empty);
            }

            int act = preparacionDataGridView.CurrentRow.Index;
            for(int i=0; i< ListaPreparacion.Count; i++)
            {
                if (ListaPreparacion[i].insumoID == Convert.ToInt16(insumoIDLabel.Text))
                {
                    if (i != act)
                    {
                        this.errValidator.SetError(this.insumoCmb, "Este insumo ya a sido asignado.");
                        result = false;
                        break;
                    }
                }
            }

            return result;
        }

        private void EnabledControls(bool valor)
        {
            this.groupBox1.Enabled = !valor;
            this.preparacionDataGridView.Enabled = valor;
        }

        private void EnabledButtons(bool valor)
        {
            this.TsbNuevo.Enabled = valor;
            this.TsbEditar.Enabled = valor;
            this.TsbEliminar.Enabled = valor;

            if (this.estadoActual == EstadoActual.Nuevo ||
                this.estadoActual == EstadoActual.Editar)
            {
                this.TsbGuardar.Enabled = true;
                this.TsbCancelar.Enabled = true;
                this.preparacionDataGridView.Enabled = false;
            }
            else
            {
                this.TsbGuardar.Enabled = false;
                this.TsbCancelar.Enabled = false;
                this.preparacionDataGridView.Enabled = true;
            }
        }

        public void ClearControls()
        {
            semiTerminadoIDLabel.Text = "-1";
            //insumosBusqueda.limpiar();
            insumoCmb.Text = "[Seleccionar un insumo]";
            cantidadTextBox.Text = string.Empty;
            insumoIDLabel.Text = "-1";
            errValidator.Clear();
        }

        private void insumoCmb_DropDown(object sender, EventArgs e)
        {
            insumosBusqueda.limpiar();
            insumoCmb.Text = "[Seleccionar un insumo]";
        }

        private void insumoCmb_DropDownClosed(object sender, EventArgs e)
        {

        }

        public void insumosBusqueda_CwfInsumoBusqueda_SeleccionEntidad(object objeto)
        {
            Insumos insumo = (Insumos)objeto;
            insumoCmb.Text = insumo.nombre;
            insumoIDLabel.Text = insumo.insumoID.ToString();
            cantidadTextBox.Focus();
            insumoCmb.HideDropDown();
        }

        private void insumoCmb_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Down)
            {
                insumoCmb.ShowDropDown();
            }
            else
                e.SuppressKeyPress = true;
        }

        public void MenuSoloConImagenes(bool estado)
        {
            this.TsMenu.SuspendLayout();
            if (estado)
            {
                TsbNuevo.DisplayStyle = ToolStripItemDisplayStyle.Image;
                TsbEditar.DisplayStyle = ToolStripItemDisplayStyle.Image;
                TsbCancelar.DisplayStyle = ToolStripItemDisplayStyle.Image;
                TsbGuardar.DisplayStyle = ToolStripItemDisplayStyle.Image;
                TsbEliminar.DisplayStyle = ToolStripItemDisplayStyle.Image;
            }
            else
            {
                TsbNuevo.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
                TsbEditar.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
                TsbCancelar.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
                TsbGuardar.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
                TsbEliminar.DisplayStyle = ToolStripItemDisplayStyle.ImageAndText;
            }
            this.TsMenu.ResumeLayout();
        }
    }
}
